package com.tunan.system.persistence.dao;

import java.util.List;
import java.util.Map;

import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;

import com.tunan.persistence.dao.sck.EntityMapper;
import com.tunan.persistence.model.TSysUser;
import com.tunan.system.persistence.model.BscDicCodeItem;
import com.tunan.system.persistence.model.BscDicCodeType;

/**
 * 业务字典类型表Mapper接口
 */
public interface BscDicCodeMapper  extends EntityMapper<TSysUser>{
   
	/**
	 * 根据ID获取数据字典类型Form对象
	 * @param typeId 数据字典类型主键
	 * @return 数据字典类型Form对象
	 */
	public BscDicCodeType getTypeByTypeId(String typeId);
	
	/**
	 * 根据数据字典类型编号获取数据字典类型Form对象
	 * @param typeCode 数据字典类型编号
	 * @return 数据字典类型Form对象
	 */
	public BscDicCodeType getTypeByTypeCode(String typeCode);
	
	/**
	 * 获取所有数据字典类型
	 * @return 所有数据字典类型
	 */
	public List<BscDicCodeType> getAllTypes(Map<String,Object> params);
	
	/**
	 * 获取所有数据字典子型
	 * @return 所有数据字典子型
	 */
	List<BscDicCodeItem> getAllItems(Map<String,Object> params);
	
	/**
	 * 根据ID集合获取数据字典类型集合
	 * @return 数据字典类型集合
	 */
	public List<BscDicCodeType> getTypes(String[] typeIds);	
	/**
	 * 分页查询数据字典类型
	 * @param typeKeyword 查询关键字，允许为NULL
	 * @param pager 分页对象
	 * @return 查询后的分页对象
	 */
	public List<BscDicCodeType> pfindTypes(@Param("typeKeyword") String typeKeyword);
	
	
	/**
	 * 获取需要导出的数据字典类型记录
	 * @param ids   要导出的数据字典类型的ID数组集合
	 * @return 数据字典类型记录集合
	 */
	public List<BscDicCodeType> findExportTypes(String[] ids);
	
	/**
	 * 获取需要导出的数据字典子项记录
	 * @param ids   要导出的数据字典类型的ID数组集合
	 * @return 数据字典子项记录集合
	 */
	public List<BscDicCodeItem> findExportItems(String[] ids);
	
	/**
	 * 插入新的数据字典类型form对象到数据库
	 * @param form 数据字典类型form对象
	 */
	public void insertType(BscDicCodeType form);

	/**
	 * 更新数据字典类型form对象
	 * @param form 数据字典类型form对象
	 */
	public void updateType(BscDicCodeType form);
	
	/**
	 * 修改数据字典类型启用状态以及关联子项启用状态
	 * @param typeId 数据字典类型主键
	 * @param typeIsActive 指定要修改的启用状态
	 */
	public void updateTypeIsActiveField(@Param("typeId") String typeId, @Param("typeIsActive") String typeIsActive);
	
	
	/**
	 * 根据数据字典类型主键删除对应的数据字典类型记录
	 * @param typeId 数据字典类型主键
	 */
	public void deleteTypeByTypeId(String typeId);
	
	/**
	 * 根据数据字典类型编号删除对应的数据字典类型记录
	 * @param typeCode 数据字典类型编号
	 */
	public void deleteTypeByTypeCode(String typeCode);
	
	/**
	 * 根据数据字典子项主键获取对应的数据字典子项form对象
	 * @param itemId 数据字典子项主键
	 * @return 数据字典子项form对象
	 */
	public BscDicCodeItem getItemByItemId(String itemId);
	
	/**
	 * 根据数据字典类型主键和子项编码获取对应的数据字典子项form对象
	 * @param typeId     数据字典类型主键
	 * @param itemCode   数据字典子项编码
	 * @return           数据字典子项form对象
	 */
	public BscDicCodeItem getItemByTypeIdAndItemCode(@Param("typeId") String typeId,@Param("itemCode") String itemCode);
	
	/**
	 * 分页查询子项
	 * @param typeId   数据字典类型ID
	 * @param itemKeyword   查询关键字
	 * @param pager 分页对象
	 * @return 查询后的分页对象
	 */
	public List<BscDicCodeItem> pfindItems(@Param("typeCode") String typeCode, @Param("itemKeyword") String itemKeyword);
	
	/**
	 * 插入新的数据字典子项form对象到数据库
	 * @param form 数据字典子项form对象
	 */
	public void insertItem(BscDicCodeItem form);

	/**
	 * 更新数据字典子项form对象
	 * @param form 数据字典子项form对象
	 */
	public void updateItem(BscDicCodeItem form);
	
	/**
	 * 根据数据字典子项主键删除对应的数据字典子项记录
	 * @param typeId 数据字典类型子项
	 */
	public void deleteItemByItemId(String itemId);
	
	/**
	 * 根据数据字典子项主键删除对应的数据字典子项记录
	 * @param typeId 数据字典类型子项
	 */
	public void deleteItemCascadeByItemId(String itemId);
	
	/**
	 * 获取某个子项及其所有递归子项的集合
	 */
	public List<BscDicCodeItem> getAllItemsByItemId(String itemId);
	
	/**
	 * 根据数据字典类型主键删除对应的数据字典子项记录
	 * @param typeId 数据字典类型子项
	 */
	public void deleteItemsByTypeId(String typeId);

	/**
	 * 根据数据字典类型ID获取关联的所有数据字典项列表
	 * @param typeId 数据字典类型ID
	 * @return 所有数据字典项Form对象列表
	 */
	public List<BscDicCodeItem> getAllItemsByTypeId(String typeId);
	
	/**
	 * 根据数据字典类型ID获取关联的已生效的数据字典项列表 
	 * @param typeId 数据字典类型ID
	 * @return 已生效的数据字典项Form对象列表
	 */
	public List<BscDicCodeItem> getActiveItemsByTypeId(String typeId);
	
	
	/**
	 * 根据数据字典类型ID获取关联的已生效的数据字典项列表 
	 * @param typeCode 数据字典类型编码
	 * @return 已生效的数据字典项Form对象列表
	 */
	public List<BscDicCodeItem> getActiveItemsByTypeCode(String typeCode);
	
	/**
	 * 根据数据字典类型ID修改其对应的所有数据字典子项到指定启用状态
	 * @param typeId   数据字典类型ID
	 * @param isActive 指定启用状态
	 */
	public void updateItemActiveStatusByTypeId(@Param("typeId")String typeId, @Param("isActive")String isActive);
	
	/**
	 * 更新字典子项是否启用状态
	 * @param itemId   数据字典子项ID
	 * @param isActive 指定启用状态
	 */
	public void updateItemIsActiveField(@Param("itemId") String itemId, @Param("itemIsActive") String itemIsActive);
	
	/**
	 * 更新类型typeCode时关联修改item的typeCode
	 * @param typeCode
	 * @param oldtypeCode
	 */
	public void updateItemTypeCode(@Param("typeCode") String typeCode, @Param("oldtypeCode") String oldtypeCode);

	/**
	 * 
	 * @param params
	 * @return List<BscDicCodeItem>
	 * @Description TpecodeAndItemode查找
	 * @date 2016年4月8日
	 * @author kinda
	 */
	public List<BscDicCodeItem> selectByTypecodeAndItemode(Map<String, Object> params);
	
	
	
	//**************************************************************************
	/**
	 * TODO 转换生成键值对数据 <br><pre>
	 * 编写者：yangjian@toonan.com
	 * 创建时间：2016年4月11日 下午5:47:21 </pre>
	 * @param 参数类型 参数名 说明
	 * @return typeCode 字典类型,itemCodes 子项编码数组
	 * @throws 异常类型 说明
	 */
	//**************************************************************************
	public List<BscDicCodeItem> findConvertItems(String typeCode,String[] itemCodes);
}